/**
 * ReportGear(2011)
 */
package com.reportgear.core.data;

import java.util.List;
import java.util.Set;

import com.reportgear.core.data.model.SalaryDataObject;
import com.reportgear.report.model.cell.value.salary.SalaryObjectType;
import com.reportgear.report.setting.ApplicationContext;

/**
 * 电信薪酬帮助类
 * 
 * @version 1.0 2011-4-5
 * @author <a herf="lexloo@gmail.com">lexloo</a>
 * @since Report 1.0
 */
public enum SalaryHelper {
	INSTANCE;

	private SalaryDataQueryDelegate delegate;

	SalaryHelper() {
		if (ApplicationContext.INSTANCE.isApplet()) {
			this.delegate = new SalaryDataQueryXmlByJs();
		} else {
			this.delegate = new SalaryDataQueryXmlByLocal();
		}
	}

	/**
	 * 组织机构
	 */
	public List<SalaryDataObject> getOrgs() {
		return this.delegate.getOrgs();
	}

	/**
	 * 成本中心
	 */
	public List<SalaryDataObject> getCenters() {
		return this.delegate.getCenters();
	}

	/**
	 * 薪酬体系
	 */
	public List<SalaryDataObject> getSalaryScheme() {
		return this.delegate.getSalaryScheme();
	}

	/**
	 * 薪酬项目
	 * 
	 * @param schemeId
	 *            薪酬体系Id
	 */
	public List<SalaryDataObject> getSalaryItem(int schemeId) {
		return this.delegate.getSalaryItem(schemeId);
	}

	/**
	 * 发放表公司汇总数据
	 * 
	 * @param paymentId
	 * @param level
	 * @param rowSet
	 * @param colSet
	 */
	public List<SalaryDataObject> getPayTotal(int paymentId, SalaryObjectType objectType, int level,
			Set<Integer> rowSet, Set<Integer> colSet) {
		return this.delegate.getPayTotal(paymentId, objectType, level, rowSet, colSet);
	}

	/**
	 * 发放表员工档案明细数据
	 */
	public List<SalaryDataObject> getPayDoc(int paymentId, SalaryObjectType objectType, int level, Set<Integer> rowSet,
			Set<Integer> colSet) {
		return this.delegate.getPayDoc(paymentId, objectType, level, rowSet, colSet);
	}

	/**
	 * 发放表员工薪酬明细数据
	 */
	public List<SalaryDataObject> getPayDetail(int paymentId, SalaryObjectType objectType, int level,
			Set<Integer> rowSet, Set<Integer> colSet) {
		return this.delegate.getPayDetail(paymentId, objectType, level, rowSet, colSet);
	}

	/**
	 * 读取指定模板
	 * 
	 * @param reportId
	 *            模板Id
	 * @return 模板内容
	 */
	public String loadTemplate(int reportId) {
		return this.delegate.loadTemplate(reportId);
	}

	/**
	 * 模板列表读取服务
	 * 
	 * @return 模板列表
	 */
	public List<SalaryDataObject> loadTemplateList() {
		return this.delegate.loadTemplateList();
	}

	/**
	 * 模板存储
	 * 
	 * @param template
	 *            模型内容
	 * @param id
	 *            模板Id
	 * @param SystemId
	 *            薪酬体系Id
	 * @param name
	 *            模板名称
	 * @return 模板返回Id结果
	 */
	public int saveTemplate(String template, int id, int SystemId, String name) {
		return this.delegate.saveTemplate(template, id, SystemId, name);
	}

	/**
	 * 删除指定模板
	 * 
	 * @param id
	 *            模板Id
	 * @return 删除结果
	 */
	public boolean deleteTemplate(int id) {
		return this.delegate.deleteTemplate(id);
	}

	/**
	 * 发放表中的对象信息(组织机构或成本中心)
	 */
	public List<SalaryDataObject> getPayObjects(int paymentId, SalaryObjectType objectType, int level,
			Set<Integer> rowSet, Set<Integer> colSet) {
		return this.delegate.getPayObjects(paymentId, objectType, level, rowSet, colSet);
	}

	/**
	 * 发放表基本信息，发放表描述
	 */
	public SalaryDataObject getPayBase(int paymentId) {
		return this.delegate.getPayBase(paymentId);
	}

	/**
	 * 根据Key值获取排序信息
	 */
	public List<SalaryDataObject> getOrderInfo(String key) {
		return this.delegate.getOrderInfo(key);
	}

	/**
	 * 保存排序信息
	 * 
	 * @param key
	 *            键值
	 * @param content
	 *            内容
	 */
	public int saveOrderInfo(String key, String content) {
		return this.delegate.saveOrderInfo(key, content);
	}

	/**
	 * 获取最后发放表信息，用于设计时预览
	 * 
	 * @return 发放表信息
	 */
	public List<SalaryDataObject> getLastPayments() {
		return this.delegate.getLastPayments();
	}

	/**
	 * 获取Session变量对象
	 * 
	 * @return Session变量对象
	 */
	public SalaryDataObject getSessionVar() {
		return this.delegate.getSessionVar();
	}
}
